In order to reduce information technology (IT) costs of acquiring and/or managing an infrastructure, home users and organizations are moving their workloads to public Cloud providers, which host virtual machines (VMs) with different properties (for example, central processing unit (CPU), memory, disk size, software stack, software versions, and services). One difficulty raised in this scenario is that users have to select VMs (also referred to as VM templates), among several options offered by providers. The selection can be challenging as users do not necessarily know how their workload will perform (that is, speed, robustness, scalability, etc.) in an unknown environment and existing templates may not meet their exact needs.
Existing approaches for selecting resources (in the case of Clouds and VM templates) are based on the following. For example, Cloud providers can simply show users the available VM templates and let users select these templates according to their needs. Also, Cloud providers can show users (or select) the closest templates that match user needs against available templates, which can be described using free text format and ontologies. Additionally, providers can create customized templates according to user needs, an approach more commonly present in private clouds.
However, a problem among the existing solutions is that users may have little experience on the target environment, and hence, selecting proper templates is a difficult task. On the other hand, Cloud providers can sometimes include a knowledge base of application executions and resource selections of other users. However, in a Cloud scenario, resource selection is dynamic, and the level of user experience details is often extremely high, and, moreover, user experience changes over time.